package com.guaoran.interview.in2018.jvm;

/**
 * @author : guaoran
 * @Description : <br/>
 * @date :2018/12/21 10:18
 */
public class ClassLoaderDemo {

    static int count1;
    static int count2 = 0;
    static ClassLoaderDemo classLoaderDemo = new ClassLoaderDemo();

    public ClassLoaderDemo() {
        count1++;
        count2++;
    }
    public static ClassLoaderDemo newInterface(){
        return classLoaderDemo;
    }

    /**
     * java源文件.java -> java编译器 -> java源文件.class -> 类装载器加载 ->运行
     *  结果是 count1=1    count2=0
     *  在加载完后的连接阶段的准备期，会为singleton分配内存，设定默认值为null，counter1默认值为0，counter2 默认值为 0.
     *  进入初始化阶段，
     *  第一步为singleton赋值 会调用Singleton的构造方法，此时执行counter1++，counter2++ counter1 = 1,counter2 = 1；
     *  第二步为counter1赋值，由于没有赋值语句counter1 仍为1；
     *  第三步为 counter2赋值，counter2 被赋值为 0，所以结果是counter1 =1
     */
    public static void main(String[] args) {
        ClassLoaderDemo.newInterface();
        System.out.println("count1="+count1+"\tcount2="+count2);
    }
}
